﻿using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using KimberlyDashboardLIB;

namespace KimberlyDashboard.admin
{
    public partial class Permisos : cGlobal
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                this.CargarRoles();
                this.CargarUsuarios();            
            }
        }

        #region "Eventos"

        protected void lnkGuardar_Click(object sender, EventArgs e)
        {
            if (this.Validar())
            {
                try
                {
                    //Se crea/actualiza el usuario
                    Usuario usu = new Usuario();
                    usu.Id = Convert.ToInt32(this.hdnId.Value);
                    usu.Login = this.txtUsuario.Text.Trim();
                    usu.Nombre = this.txtNombre.Text.Trim();
                    usu.Apellido = this.txtApellido.Text.Trim();

                    if (this.drpRol.SelectedValue == "1")
                        usu.Roles.Add(Enumeraciones.Rol.ADMINISTRADOR);
                    else if (this.drpRol.SelectedValue == "2")
                        usu.Roles.Add(Enumeraciones.Rol.CONSULTA);

                    usu.Actualizar();

                    Page.ClientScript.RegisterStartupScript(this.GetType(), "JS", "<script language='javascript'> alert('El usuario ha sido guardado'); </Script>");
                    this.hdnId.Value = "0";
                    this.txtUsuario.Text = "";
                    this.txtNombre.Text = "";
                    this.txtApellido.Text = "";
                    this.drpRol.SelectedIndex = 0;
                    this.CargarUsuarios();
                }
                catch (Exception ex)
                {
                    Page.ClientScript.RegisterStartupScript(this.GetType(), "JS", "<script language='javascript'> alert('No se pudo guardar el usuario: " + Utilidades.FormatearMensajeError(ex.Message) + "'); </Script>");
                }
            }
        }

        protected void grdUsuarios_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            //Obtiene el id a eliminar
            int id = Convert.ToInt32(this.grdUsuarios.DataKeys[e.RowIndex].Value.ToString());
            try
            {
                Usuario usu = new Usuario();
                usu.Eliminar(id);
                Page.ClientScript.RegisterStartupScript(this.GetType(), "JS", "<script language='javascript'> alert('El usuario ha sido eliminado'); </Script>");
                this.CargarUsuarios();
            }
            catch (Exception ex)
            {
                Page.ClientScript.RegisterStartupScript(this.GetType(), "JS", "<script language='javascript'> alert('No se pudo eliminar el usuario: " + Utilidades.FormatearMensajeError(ex.Message) + "'); </Script>");
            }
        }

        protected void grdUsuarios_RowEditing(object sender, GridViewEditEventArgs e)
        {
            try
            {
                //Se obtiene la info del rol a editar            
                GridViewRow gvr = this.grdUsuarios.Rows[e.NewEditIndex];
                this.txtUsuario.Text = Server.HtmlDecode(gvr.Cells[1].Text);                
                this.txtNombre.Text = Server.HtmlDecode(gvr.Cells[2].Text);
                this.txtApellido.Text = Server.HtmlDecode(gvr.Cells[3].Text);
                this.hdnId.Value = this.grdUsuarios.DataKeys[e.NewEditIndex].Value.ToString();

                //Se obtienen los roles a los que pertenece el usuario            
                Usuario usu = new Usuario();
                DataSet dtsRoles = usu.GetRolesUsuario(Convert.ToInt32(this.hdnId.Value));
                //Recorre el listbox y selecciona los roles a los que pertenece el usuario
                if (dtsRoles.Tables[0].Rows.Count > 0)
                    this.drpRol.SelectedValue = dtsRoles.Tables[0].Rows[0][0].ToString();
                else
                    this.drpRol.SelectedIndex = 0;

                this.grdUsuarios.Rows[e.NewEditIndex].BackColor = System.Drawing.Color.Beige;
            }
            catch (Exception ex)
            {
                Page.ClientScript.RegisterStartupScript(this.GetType(), "JS", "<script language='javascript'> alert('Ocurrió un error al obtener la información del usuario: " + Utilidades.FormatearMensajeError(ex.Message) + "'); </Script>");
            }        
        }

        #endregion

        #region "Métodos privados"
        private void CargarRoles()
        {
            try
            {
                DataSet dts = objSeguridad.GetRoles();
                DropDownFill(this.drpRol, dts.Tables[0], dts.Tables[0].Columns[1].ColumnName, dts.Tables[0].Columns[0].ColumnName, "Seleccione...", "0");
            }
            catch (Exception ex)
            {
                Page.ClientScript.RegisterStartupScript(this.GetType(), "JS", "<script language='javascript'> alert('No se pudieron cargar los roles: " + Utilidades.FormatearMensajeError(ex.Message) + "'); </Script>");
            }
        }

        private void CargarUsuarios()
        {
            try
            {
                DataSet dts = objSeguridad.GetUsuarios();
                if (dts.Tables[0].Rows.Count > 0)
                    this.grdUsuarios.DataSource = dts.Tables[0];
                else
                    this.grdUsuarios.DataSource = null;

                this.grdUsuarios.DataBind();
            }
            catch (Exception ex)
            {
                Page.ClientScript.RegisterStartupScript(this.GetType(), "JS", "<script language='javascript'> alert('No se pudieron cargar los usuarios: " + Utilidades.FormatearMensajeError(ex.Message) + "'); </Script>");
            }        
        }

        private bool Validar()
        {
            string mensaje = "";
            //Longitud de los textos
            if (this.txtUsuario.Text.Length > 50)
                mensaje += "- El usuario no puede contener más de 50 caracteres";            
            if (this.txtNombre.Text.Length > 100)
                mensaje += "- El nombre no puede contener más de 100 caracteres";
            if (this.txtApellido.Text.Length > 100)
                mensaje += "- El apellido no puede contener más de 100 caracteres";

            if (mensaje.Length > 0)
            {
                Page.ClientScript.RegisterStartupScript(this.GetType(), "JS", "<script language='javascript'> alert('No se puede guardar el usuario: " + mensaje + "'); </Script>");
                return false;
            }
            else
                return true;        
        }
        #endregion



    }
}